home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / java / awt / EventDispatchThread.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  6.4 KB  |  274 lines

  1. package java.awt;
  2.  
  3. import java.awt.EventFilter.FilterAction;
  4. import java.awt.event.MouseEvent;
  5. import java.lang.reflect.Method;
  6. import java.security.AccessController;
  7. import java.util.Vector;
  8. import sun.awt.AWTAutoShutdown;
  9. import sun.awt.DebugHelper;
  10. import sun.awt.SunToolkit;
  11. import sun.awt.dnd.SunDragSourceContextPeer;
  12. import sun.security.action.GetPropertyAction;
  13.  
  14. class EventDispatchThread extends Thread {
  15.    private static final DebugHelper dbg = DebugHelper.create(EventDispatchThread.class);
  16.    private EventQueue theQueue;
  17.    private boolean doDispatch = true;
  18.    private static final int ANY_EVENT = -1;
  19.    private Vector<EventFilter> eventFilters = new Vector();
  20.    private int modalFiltersCount = 0;
  21.    private static final String handlerPropName = "sun.awt.exception.handler";
  22.    private static String handlerClassName = null;
  23.    private static String NO_HANDLER = new String();
  24.  
  25.    EventDispatchThread(ThreadGroup var1, String var2, EventQueue var3) {
  26.       super(var1, var2);
  27.       this.theQueue = var3;
  28.    }
  29.  
  30.    void stopDispatchingImpl(boolean var1) {
  31.       StopDispatchEvent var2 = new StopDispatchEvent(this);
  32.       if (Thread.currentThread() != this) {
  33.          this.theQueue.postEventPrivate(var2);
  34.          if (var1) {
  35.             try {
  36.                this.join();
  37.             } catch (InterruptedException var6) {
  38.             }
  39.          }
  40.       } else {
  41.          var2.dispatch();
  42.       }
  43.  
  44.       synchronized(this.theQueue) {
  45.          if (this.theQueue.getDispatchThread() == this) {
  46.             this.theQueue.detachDispatchThread();
  47.          }
  48.  
  49.       }
  50.    }
  51.  
  52.    public void stopDispatching() {
  53.       this.stopDispatchingImpl(true);
  54.    }
  55.  
  56.    public void stopDispatchingLater() {
  57.       this.stopDispatchingImpl(false);
  58.    }
  59.  
  60.    public void run() {
  61.       try {
  62.          this.pumpEvents(new 1(this));
  63.       } finally {
  64.          synchronized(this.theQueue) {
  65.             if (this.theQueue.getDispatchThread() == this) {
  66.                this.theQueue.detachDispatchThread();
  67.             }
  68.  
  69.             if (this.theQueue.peekEvent() != null || !SunToolkit.isPostEventQueueEmpty()) {
  70.                this.theQueue.initDispatchThread();
  71.             }
  72.  
  73.             AWTAutoShutdown.getInstance().notifyThreadFree(this);
  74.          }
  75.       }
  76.  
  77.    }
  78.  
  79.    void pumpEvents(Conditional var1) {
  80.       this.pumpEvents(-1, var1);
  81.    }
  82.  
  83.    void pumpEventsForHierarchy(Conditional var1, Component var2) {
  84.       this.pumpEventsForHierarchy(-1, var1, var2);
  85.    }
  86.  
  87.    void pumpEvents(int var1, Conditional var2) {
  88.       this.pumpEventsForHierarchy(var1, var2, (Component)null);
  89.    }
  90.  
  91.    void pumpEventsForHierarchy(int var1, Conditional var2, Component var3) {
  92.       this.pumpEventsForFilter(var1, var2, new HierarchyEventFilter(var3));
  93.    }
  94.  
  95.    void pumpEventsForFilter(Conditional var1, EventFilter var2) {
  96.       this.pumpEventsForFilter(-1, var1, var2);
  97.    }
  98.  
  99.    void pumpEventsForFilter(int var1, Conditional var2, EventFilter var3) {
  100.       this.addEventFilter(var3);
  101.  
  102.       while(this.doDispatch && var2.evaluate()) {
  103.          if (this.isInterrupted() || !this.pumpOneEventForFilters(var1)) {
  104.             this.doDispatch = false;
  105.          }
  106.       }
  107.  
  108.       this.removeEventFilter(var3);
  109.    }
  110.  
  111.    void addEventFilter(EventFilter var1) {
  112.       synchronized(this.eventFilters) {
  113.          if (!this.eventFilters.contains(var1)) {
  114.             if (var1 instanceof ModalEventFilter) {
  115.                ModalEventFilter var3 = (ModalEventFilter)var1;
  116.                int var4 = 0;
  117.  
  118.                for(var4 = 0; var4 < this.eventFilters.size(); ++var4) {
  119.                   EventFilter var5 = (EventFilter)this.eventFilters.get(var4);
  120.                   if (var5 instanceof ModalEventFilter) {
  121.                      ModalEventFilter var6 = (ModalEventFilter)var5;
  122.                      if (var6.compareTo(var3) > 0) {
  123.                         break;
  124.                      }
  125.                   }
  126.                }
  127.  
  128.                this.eventFilters.add(var4, var1);
  129.                ++this.modalFiltersCount;
  130.             } else {
  131.                this.eventFilters.add(var1);
  132.             }
  133.          }
  134.  
  135.       }
  136.    }
  137.  
  138.    void removeEventFilter(EventFilter var1) {
  139.       synchronized(this.eventFilters) {
  140.          if (this.eventFilters.contains(var1)) {
  141.             if (var1 instanceof ModalEventFilter) {
  142.                --this.modalFiltersCount;
  143.             }
  144.  
  145.             this.eventFilters.remove(var1);
  146.          }
  147.  
  148.       }
  149.    }
  150.  
  151.    static boolean checkMouseEventForModalJInternalFrame(MouseEvent var0, Component var1) {
  152.       if (Component.isInstanceOf(var1, "javax.swing.JInternalFrame")) {
  153.          Container var2;
  154.          synchronized(var1.getTreeLock()) {
  155.             var2 = ((Container)var1).getHeavyweightContainer();
  156.          }
  157.  
  158.          if (var0.getSource() == var2) {
  159.             return true;
  160.          }
  161.       }
  162.  
  163.       return false;
  164.    }
  165.  
  166.    boolean pumpOneEventForFilters(int var1) {
  167.       try {
  168.          AWTEvent var2;
  169.          boolean var14;
  170.          do {
  171.             var2 = var1 == -1 ? this.theQueue.getNextEvent() : this.theQueue.getNextEvent(var1);
  172.             var14 = true;
  173.             synchronized(this.eventFilters) {
  174.                for(int var5 = this.eventFilters.size() - 1; var5 >= 0; --var5) {
  175.                   EventFilter var6 = (EventFilter)this.eventFilters.get(var5);
  176.                   EventFilter.FilterAction var7 = var6.acceptEvent(var2);
  177.                   if (var7 == FilterAction.REJECT) {
  178.                      var14 = false;
  179.                      break;
  180.                   }
  181.  
  182.                   if (var7 == FilterAction.ACCEPT_IMMEDIATELY) {
  183.                      break;
  184.                   }
  185.                }
  186.             }
  187.  
  188.             var14 = var14 && SunDragSourceContextPeer.checkEvent(var2);
  189.             if (!var14) {
  190.                var2.consume();
  191.             }
  192.          } while(!var14);
  193.  
  194.          DebugHelper var10000 = dbg;
  195.          this.theQueue.dispatchEvent(var2);
  196.          return true;
  197.       } catch (ThreadDeath var10) {
  198.          return false;
  199.       } catch (InterruptedException var11) {
  200.          return false;
  201.       } catch (RuntimeException var12) {
  202.          this.processException(var12, this.modalFiltersCount > 0);
  203.       } catch (Error var13) {
  204.          this.processException(var13, this.modalFiltersCount > 0);
  205.       }
  206.  
  207.       return true;
  208.    }
  209.  
  210.    private void processException(Throwable var1, boolean var2) {
  211.       if (!this.handleException(var1)) {
  212.          if (var2) {
  213.             System.err.println("Exception occurred during event dispatching:");
  214.             var1.printStackTrace();
  215.          } else {
  216.             if (var1 instanceof RuntimeException) {
  217.                throw (RuntimeException)var1;
  218.             }
  219.  
  220.             if (var1 instanceof Error) {
  221.                throw (Error)var1;
  222.             }
  223.          }
  224.       }
  225.  
  226.    }
  227.  
  228.    private boolean handleException(Throwable var1) {
  229.       try {
  230.          if (handlerClassName == NO_HANDLER) {
  231.             return false;
  232.          } else {
  233.             if (handlerClassName == null) {
  234.                handlerClassName = (String)AccessController.doPrivileged(new GetPropertyAction("sun.awt.exception.handler"));
  235.                if (handlerClassName == null) {
  236.                   handlerClassName = NO_HANDLER;
  237.                   return false;
  238.                }
  239.             }
  240.  
  241.             Method var2;
  242.             Object var3;
  243.             try {
  244.                ClassLoader var4 = Thread.currentThread().getContextClassLoader();
  245.                Class var5 = Class.forName(handlerClassName, true, var4);
  246.                var2 = var5.getMethod("handle", Throwable.class);
  247.                var3 = var5.newInstance();
  248.             } catch (Throwable var6) {
  249.                handlerClassName = NO_HANDLER;
  250.                return false;
  251.             }
  252.  
  253.             var2.invoke(var3, var1);
  254.             return true;
  255.          }
  256.       } catch (Throwable var7) {
  257.          return false;
  258.       }
  259.    }
  260.  
  261.    boolean isDispatching(EventQueue var1) {
  262.       return this.theQueue.equals(var1);
  263.    }
  264.  
  265.    EventQueue getEventQueue() {
  266.       return this.theQueue;
  267.    }
  268.  
  269.    // $FF: synthetic method
  270.    static boolean access$002(EventDispatchThread var0, boolean var1) {
  271.       return var0.doDispatch = var1;
  272.    }
  273. }
  274.